import javaconfig.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

import javax.xml.bind.annotation.XmlAccessOrder;

import java.io.FileInputStream;

import static javafx.scene.input.KeyCode.F;

public class TestApplicationContextAndBeanFactory {

    public static void main(String[] args) throws Exception{
        //初始化spring环境
        ApplicationContext context=new ClassPathXmlApplicationContext("beans_javaconfig.xml");  // 孙子
 /*
        这种方式初始化bean的时机：是在应用启动时，还是调用bean的时候？
        答案：应用启动的时候bean就被实例化了
        意义：今早发现代码问题
        不好的方面：浪费内存空间
         */
       // BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("beans_javaconfig.xml"));           //爷爷
/*
        采用爷爷接口初始化容器并不会马上实例化bean，而是懒加载
        意义：节省内存空间
        不好的方面：不能马上发现问题
 */


        //上面代码执行，那么所有bean都被容器实例化了，下面我们问容器拿

       UserService userService1=(UserService)context.getBean("userService");

       System.out.println(userService1.isExists(13));

        UserService userService2=(UserService)context.getBean("userService");

        System.out.println(userService2.isExists(13));
        System.out.println("输出创建bean的作用域测试结果：");
        System.out.println(userService1==userService2);//true
    }

}
